#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
//全局变量
int bird_x,bird_y;//小鸟位置
int high,width;//游戏画面尺寸 
int bar_y,bar_xtop,bar_xdown;//障碍物坐标 
int score;//游戏分数 
int v;//速度




int gotoxy(int x,int y)//光标移动到（x，y） 位置 
{
	HANDLE handle = GetStdHandle (STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition (handle, pos);
} 





int hide()//隐藏光标 
{
	CONSOLE_CURSOR_INFO cursor_info = {1, 0};
	SetConsoleCursorInfo (GetStdHandle (STD_OUTPUT_HANDLE), &cursor_info);
} 







int starup()//游戏初始化 
{
	high=18;
	width=30;

	bird_x=0;
	bird_y=width/3;
	
	bar_y=width;
	bar_xtop=high/4;
	bar_xdown=high/2+2;
	
	score=0;
	
	v=1; 
}





int show()//游戏显示
{
	gotoxy(0,0);
	int i,j;
	for(i=0;i<=high;i++)
	{
		for(j=0;j<=width;j++)
		{
			if((i==bird_x)&&(j==bird_y))
				printf("@");//显示小鸟 
			else if((j==bar_y)&&(i<=bar_xtop||i>=bar_xdown))
				printf("*");
			else
				printf(" ");//显示空格 
		}
		printf("\n");
	}
	printf("得分：%d",score);	
}



int updataWithoutInput()//用户无关设置
{
	if(bar_y==bird_y)
	{
		if((bird_x>bar_xtop)&&(bird_x<bar_xdown))
			score++;
		else
		{
			exit(0);
		}
	}
	
	bird_x=bird_x+v;
	v++;
	
	if(bar_y>0)            //显示障碍物 
		bar_y--;
	else
	{
		bar_y=width;
		
		int randposition=rand()%(high-5);
		
		bar_xtop=randposition;
		bar_xdown=randposition+high/4;//下障碍物显示的时候与上障碍物可以空出四分之high 
	}
	Sleep(150); 
}




int updataWithInput()//用户有关设置
{
	char input;
	if(kbhit())//当按下键时执行
	{
		input=getch();
		if(input==' ')
			bird_x=bird_x-4;
			v=1;
	} 
}



int main()
{
	hide();
	starup();//数据初始化
	while(1)//游戏循环 
	{
		show();//游戏显示 
		updataWithoutInput();//用户无关设置 
		updataWithInput(); //用户有关设置 
	} 
	return 0; 
} 